# 1. 请写出列表支持的所有方法及说明（例如: append 向列表末尾添加元素）

# - index     在列表中查找值
# - append    将参数添加到列表末尾
# - insert    在列表任意下标处添加一个值
# - remove    从列表中删除值
# - sort      将列表中的值排序
# - len       返回列表中元素个数


# 2. 说明列表的浅拷贝和深拷贝的区别

# 因为被复制的只是列表引用，需要注意对该列表的所有改动都可能影响到程序中的其他变量。如果需要对一个变量中的列
# 表修改，同时不修改原来的列表，就可以用 copy()或 deepcopy()。


# 3. 说明列表和元组的相同点和不同点
# ```
# [1, 2, 3, 4]
# (1, 2, 3, 4)
# ```
#
# 相同点：
#     - Python 内置的有序集合 count、index、len
#     - index 不可以超界
# 不同点：
#     - list 可变 append、insert、extend、pop、remove、clear
#     - tuple 不可变，不能为元组增加元素、也不能从中删除元素、也不能修改元素的内容。


# 4. 请写出字符串支持的所有方法及说明（例如: lower 返回字符串的小写）
# - capitalize    首字母大写
# - join          连接字符串
# - replace       匹配子串并替换
# - upper()       大写
# - lower()       小写
# - swapcase()    交换大小写
# - isalnum()     是否是字母和数字组成
# - isalpha()     是否是字母
# - isdecimal()   是否只包含十进制数字
# - isdigit()     是否全部数字(0~9)
# - islower()     是否都是小写
# - isupper()     是否全部大写
# - isspace()     是否只包含空白字符
# - strip、lstrip、rstrip  移除指定字符，默认空白字符
# - endswith、startwith    首尾判断
# - isidentifier()         是不是字母和下划线开头，其他都是字母、数字、下划线
# - find、rfind 和 index、rindex     查找字符串
# - splite、rsplite、splitelines 和 partition、rpartition   切分字符串


# 5. 有如下一个字符串变量logs，请统计出每种请求类型的数量（提示：空格分割的第2列是请求类型），得到如下输出：
# POST 2
# GET 3
#
# 下边是logs变量：
# logs = '''
# 111.30.144.7 "POST /mock/login/?t=GET HTTP/1.1" 200
# 111.30.144.7 "Get /mock/users/?t=POST HTTP/1.1" 200
# 111.13.100.92 "Post /mock/login/ HTTP/1.1" 200
# 223.88.60.88 "GET /mock/users/?t=POST HTTP/1.1" 200
# 111.30.144.7 "GET /mock/users/ HTTP/1.1" 200
# '''

import re

logs = '''
111.30.144.7 "POST /mock/login/?t=GET HTTP/1.1" 200 
111.30.144.7 "Get /mock/users/?t=POST HTTP/1.1" 200 
111.13.100.92 "Post /mock/login/ HTTP/1.1" 200 
223.88.60.88 "GET /mock/users/?t=POST HTTP/1.1" 200 
111.30.144.7 "GET /mock/users/ HTTP/1.1" 200 
'''

getRegex = re.compile(r'"get ', re.I)
postRegex = re.compile(r'"post ', re.I)
print("GET {}\nPOST {}".format(len(getRegex.findall(logs)), len(postRegex.findall(logs))))